﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SanFranciscoModel.Alumno;
using SanFranciscoModel.Curso;
using SanFranciscoModel.Materia;
using SanFranciscoModel.Nota;
using SanFranciscoModel.Intermedias;
using SanFranciscoModel.TipoConducta;

namespace SanFrancisco
{
    public partial class CargarNotaAlumno : Form
    {
        int _DNI;
        Curso _Curso;
        Materia _Materia;
        TipoNota _TipoNota;

        public CargarNotaAlumno(int dni)
        {
            _DNI = dni;
            InitializeComponent();
        }

        private void CargarNotaAlumno_Load(object sender, EventArgs e)
        {
            txtDni.Text = _DNI.ToString();
            Alumno Alumno = new Alumno();
            AlumnoManager AlumnoManager = new AlumnoManager();
            CursoManager CursoManager = new SanFranciscoModel.Curso.CursoManager();

          


            Alumno = AlumnoManager.getAlumnobyDNI(_DNI);
            txtNombre.Text = Alumno.Nombre;
            txtApellido.Text = Alumno.Apellido;

            _Curso = CursoManager.getCursoActualbyDNI(_DNI);
            txtCurso.Text = _Curso.NombreCurso;


            CargarNotas();
            CargarMaterias();

            rbMateria.Checked = true;
            rbConducta.Checked = false;
            

        }

        private void CargarNotas()
        {
            cmbNota.Items.Clear();
            int i;
            for (i = 1; i < 11; i++)
            {
                cmbNota.Items.Add(i.ToString());
            }
            cmbNota.SelectedIndex = 9;
        }
        int flag;
        private void CargarMaterias()
        {
            MateriaManager MateriaManager = new SanFranciscoModel.Materia.MateriaManager();
            flag = 1;
            List<Materia> ListMateria = new List<Materia>();
            ListMateria = MateriaManager.getMateriasByIdCurso(_Curso.idCurso);
            cmbMaterias.DataSource = ListMateria;
            cmbMaterias.DisplayMember = "Materia1";
            cmbMaterias.ValueMember = "idMateria";
            flag = 2;
            //Si no cargo Marteiras tipr una excepcion y cierro
            if (cmbMaterias.Items.Count == 0)
            {
                MessageBox.Show("El curso " + _Curso.NombreCurso + " no posee Materias Asignadas, por favor primero asigne materias al curso!");
                this.Close();
            }
            //----------------------------------------------------------

          //  cmbMaterias.SelectedIndexChanged += new System.EventHandler(this.cmbMaterias_SelectedIndexChanged);
           // this.rbMateria.CheckedChanged += new System.EventHandler(this.rbMateria_CheckedChanged);
           // this.rbConducta.CheckedChanged += new System.EventHandler(this.rbConducta_CheckedChanged);

            CargarTipoNotaFirst();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if ((_TipoNota.idTipoNota == 5 && rbConducta.Checked == true) || (_TipoNota.idTipoNota == 7 && rbMateria.Checked == true))
            {
                MessageBox.Show("No es posible relizar la carga dado que ya se encuentran cargados todos los periodos!!!");
            }
            else
            {
                AlumnoXMateriaXNota amn = new AlumnoXMateriaXNota();
                AlumnoManager AlumnoManager = new AlumnoManager();

                if (rbMateria.Checked)
                {

                    amn.DNIAlumno = _DNI;
                    amn.IdCurso = _Curso.idCurso;
                    amn.idMateria = (int)cmbMaterias.SelectedValue;
                    amn.NotaMateria = int.Parse(cmbNota.Text);
                    amn.TipoNota = _TipoNota.idTipoNota;
                    if (_TipoNota.idTipoNota == 3)
                    {
                        AlumnoManager.guardarAlumnoXMateriaXNota(amn);
                       
                        
                        //Calculo la nota final
                        AlumnoDataContext Alumno = new AlumnoDataContext();
                        //Con esto pasamos lo del stored a una lista del objeto
                        IEnumerable<AlumnoNotasResult> a;
                        a = ((IEnumerable<AlumnoNotasResult>)Alumno.AlumnoNotas(_DNI, _Curso.idCurso, (int)cmbMaterias.SelectedValue));
                        List<AlumnoNotasResult> result = new List<AlumnoNotasResult>();
                        result = a.ToList();
                        decimal NotaFinal = Convert.ToDecimal((result[0].NotaMateria + result[1].NotaMateria + result[2].NotaMateria) / 3);


                        //

                        AlumnoXMateriaXNota amn2 = new AlumnoXMateriaXNota();
                        AlumnoManager AlumnoManager2 = new AlumnoManager();
                        amn2.DNIAlumno = _DNI;
                        amn2.IdCurso = _Curso.idCurso;
                        amn2.idMateria = (int)cmbMaterias.SelectedValue;
                        amn2.NotaMateria = NotaFinal;
                        amn2.TipoNota = 4;
                        AlumnoManager2.guardarAlumnoXMateriaXNota(amn2);
                    }
                    else
                    {
                        AlumnoManager.guardarAlumnoXMateriaXNota(amn);
                    }
                   

                   // AlumnoManager.guardarAlumnoXMateriaXNota(amn);

                    MessageBox.Show("La nota fue cargada con exito");
                    this.Close();
                }
                else
                {
                    amn.DNIAlumno = _DNI;
                    amn.IdCurso = _Curso.idCurso;
                    amn.idMateria = (int)cmbMaterias.SelectedValue;
                    amn.NotaConducta = (int)cmbNota.SelectedValue;
                    amn.TipoNota = _TipoNota.idTipoNota;

                    AlumnoManager.guardarAlumnoXMateriaXNota(amn);

                    MessageBox.Show("La nota fue cargada con exito");
                    this.Close();
                }
            }
        }

        private void cmbMaterias_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (flag != 1)
            {
                //Cargo lo posible para este alumno... Para cargar una nota trimestre mayor debe tener cargada una menor
                TipoNotaManager TipoNotaManager = new TipoNotaManager();
                TipoNota TipoNota = new SanFranciscoModel.Nota.TipoNota();

                int mat = (int)cmbMaterias.SelectedValue;

                if (rbMateria.Checked)
                {
                    _TipoNota = TipoNotaManager.getTipoNotaPosibleMateria(_DNI, mat, _Curso.idCurso);
                    txtPeriodo.Text = _TipoNota.TipoNota1;

                    if (_TipoNota.idTipoNota == 7)
                    {
                        cmbNota.Enabled = false;
                    }
                    else
                    {
                        cmbNota.Enabled = true;
                    }
                }
                else
                {
                    _TipoNota = TipoNotaManager.getTipoNotaPosibleConducta(_DNI, mat, _Curso.idCurso);
                    txtPeriodo.Text = _TipoNota.TipoNota1;

                    if (_TipoNota.idTipoNota == 5)
                    {
                        cmbNota.Enabled = false;
                    }
                    else
                    {
                        cmbNota.Enabled = true;
                    }
                }
            }

        }

        private void CargarTipoNotaFirst()
        {
            //Cargo lo posible para este alumno... Para cargar una nota trimestre mayor debe tener cargada una menor
            TipoNotaManager TipoNotaManager = new TipoNotaManager();
            TipoNota TipoNota = new SanFranciscoModel.Nota.TipoNota();

            int mat = (int)cmbMaterias.SelectedValue;

            if (rbMateria.Checked)
            {
                _TipoNota = TipoNotaManager.getTipoNotaPosibleMateria(_DNI, mat, _Curso.idCurso);
                txtPeriodo.Text = _TipoNota.TipoNota1;

                if (_TipoNota.idTipoNota == 7)
                {
                    cmbNota.Enabled = false;
                }
                else
                {
                    cmbNota.Enabled = true;
                }

            }
            else
            {
                _TipoNota = TipoNotaManager.getTipoNotaPosibleConducta(_DNI, mat, _Curso.idCurso);
                txtPeriodo.Text = _TipoNota.TipoNota1;

                if (_TipoNota.idTipoNota == 5)
                {
                    cmbNota.Enabled = false;
                }
                else
                {
                    cmbNota.Enabled = true;
                }
            }

        }

        private void CargarConducta()
        {
            TipoConductaManager TipoD = new TipoConductaManager();
            cmbNota.DisplayMember = "Conducta";
            cmbNota.ValueMember = "idConducta";
            cmbNota.DataSource = TipoD.GetAllTipoConducta();
            
        }

        private void rbMateria_CheckedChanged(object sender, EventArgs e)
        {
            CargarTipoNotaFirst();
            if (rbMateria.Checked)
            {
                cmbNota.DataSource = null;
                CargarNotas();
            }
            else
            {
                CargarConducta();
            }
        }

        private void rbConducta_CheckedChanged(object sender, EventArgs e)
        {
            CargarTipoNotaFirst();
        }

        private void label8_Click(object sender, EventArgs e)
        {

        }


    }
}
